package org.csu.onlineedubackend.service;

import org.csu.onlineedubackend.dto.PendingAssignmentDTO;
import org.csu.onlineedubackend.entity.StudentAnswer;
import java.util.List;

public interface StudentAnswerService {
    /**
     * 学生提交作答
     */
    StudentAnswer submitAnswer(StudentAnswer answer);

    /**
     * 根据题目ID和学生ID查询作答
     */
    StudentAnswer getAnswerByQuestionAndStudent(Integer questionId, Integer studentId);

    /**
     * 根据题目ID查询所有学生作答
     */
    List<StudentAnswer> getAnswersByQuestionId(Integer questionId);

    /**
     * 根据学生ID查询所有作答
     */
    List<StudentAnswer> getAnswersByStudentId(Integer studentId);

    /**
     * 教师批改作答（设置是否正确）
     */
    boolean markAnswer(Integer answerId, boolean isCorrect);
    
    /**
     * 教师评分作答（设置分数）
     */
    boolean scoreAnswer(Integer answerId, Double score);

    /**
     * 根据ID获取答案
     */
    StudentAnswer getById(Integer answerId);

    /**
     * 删除答案
     */
    boolean deleteAnswer(Integer answerId);

    /**
     * 根据课程ID查询所有学生答案
     */
    List<StudentAnswer> getAnswersByCourseId(Integer courseId);

    /**
     * 根据学生ID和课程ID查询答案
     */
    List<StudentAnswer> getAnswersByStudentAndCourse(Integer studentId, Integer courseId);
    
    /**
     * 獲取學生某題的所有歷史作業（按時間排序，最新的在前）
     */
    List<StudentAnswer> getHistoryAnswersByQuestionAndStudent(Integer questionId, Integer studentId);
    
    /**
     * 统计回答指定问题的学生数量（去重）
     * @param questionId 问题ID
     * @return 回答该问题的学生数量
     */
    int countDistinctStudentsByQuestionId(Integer questionId);

    /**
     * 獲取學生未完成的作業列表
     * @param userId 學生ID
     * @return 未完成的作業列表
     */
    List<Object> getPendingAssignments(Long userId);

    List<PendingAssignmentDTO> getPendingAssignmentsByTeacher(Integer teacherId, Integer limit);
}
